Muster suchen und ersetzen und ausgeben
Muster suchen und ersetzen und ausgeben
am 27.08.2006 13:12:46 von google
Hallo,
ich habe ein kleines Problem, bei dem ich nicht weiterkomme.
Ich versuche in einem Text einen Link zu finden und diesen Link dann
wieder auszugeben.
Hier im Beispiel ganz vereinfacht über den a-Tag
while ($text2 =3D~ s/< *?a.*?\/a *?>//i)
{
print "Muster gefunden $1 bzw $_
\n";
}
Wie bekommte ich das hin, die Links zu extrahieren und
weiterzuverarbeiten?
Wolfgang
Re: Muster suchen und ersetzen und ausgeben
am 27.08.2006 13:36:44 von Stephan
Du musst die Sachen die du matchen willst unter $1 und $2 groupen! :)
i.A.,
--
Stephan 'smg' Grein,
https://stephangrein.de
GnuPG-Key-ID: 0xF8C275D4
FingerPrint: 5B6F 134A 189B A24D 342B 0961 8D4B 0230 F8C2 75D4
Re: Muster suchen und ersetzen und ausgeben
am 27.08.2006 14:21:30 von Michael Perle
google@register.venx-news.de wrote:
> Hallo,
> ich habe ein kleines Problem, bei dem ich nicht weiterkomme.
Meines Wissens gibt es FAQs und Module zum Thema.
Vielleicht CPAN nach HTML::Parser fragen oder
auf der Shell mal eingeben:
perldoc -q html tags extract
> while ($text2 =~ s/< *?a.*?\/a *?>//i)
Dein Regex ist mit Sicherheit nicht sehr
sicher gegen Sonderfaelle.
Beispiel:
Wenn das das ganze Problem waere, huelfe sowas
wie (ungetestet)
while ($text2 =~ /<\s*a\s*[^>]*>.*?<\s*a\s*>/i
Willst Du den Link wirklich wegmachen,
also durch nichts ersetzen (s/../../) oder
willst Du die Links nur finden (/../../)?
> Wie bekommte ich das hin, die Links zu extrahieren und
> weiterzuverarbeiten?
Du musst das zu findene einklammern, damit es
in $1 und $2 eingetragen wird.
Beispiel:
$text = "Eine Seefahrt ist lustig nicht wahr";
$text =~ /(ist \w+)/ig;
print $1; # Ausgabe: ist lustig
MP
Re: Muster suchen und ersetzen und ausgeben
am 27.08.2006 14:47:19 von Alexander Bartolich
google@register.venx-news.de schrieb:
> Hallo,
> ich habe ein kleines Problem, bei dem ich nicht weiterkomme.
> Ich versuche in einem Text einen Link zu finden und diesen Link dann
> wieder auszugeben.
>
> Hier im Beispiel ganz vereinfacht über den a-Tag
>
> while ($text2 =~ s/< *?a.*?\/a *?>//i)
Örks. Was soll denn das werden?
Ich vermute, deine Eingabezeile sieht in etwa so aus:
Dein Muster kann nicht einmal ansatzweise den Text zwischen
den Anführungszeichen isolieren.
> {
> print "Muster gefunden $1 bzw $_
\n";
> }
>
> Wie bekommte ich das hin, die Links zu extrahieren und
> weiterzuverarbeiten?
Mit runden Klammern stellt man Teile des gefundenen Texts
als $1, $2, etc. zur Verfügung. In deinem Fall interessiert
dich möglicherweise
"([^"]*)"
--
Re: Muster suchen und ersetzen und ausgeben
am 27.08.2006 17:49:49 von ventrax
> > while ($text2 =3D~ s/< *?a.*?\/a *?>//i)
>
> Örks. Was soll denn das werden?
> Ich vermute, deine Eingabezeile sieht in etwa so aus:
>
>
>
> Dein Muster kann nicht einmal ansatzweise den Text zwischen
> den Anführungszeichen isolieren.
Dieses Pattern filtert alles zwischen als minimal match.
zb. V=
isit
google
es ist halt maximal allgemein gehalten für Links
Wie gesagt: das Pattern soll noch weiter verarbeitet werden.
Wolfgang
Re: Muster suchen und ersetzen und ausgeben
am 27.08.2006 17:55:01 von ventrax
> > Wie bekommte ich das hin, die Links zu extrahieren und
> > weiterzuverarbeiten?
>
> Mit runden Klammern stellt man Teile des gefundenen Texts
> als $1, $2, etc. zur Verfügung. In deinem Fall interessiert
> dich möglicherweise
>
> "([^"]*)"
Super :)
klappt prima.
Bekomme nun die Links aus dem Text.
Danke für die schnelle Hilfe